package 每日一题;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 2423. 删除字符使频率相同
 * 给你一个下标从 0 开始的字符串 word ，字符串只包含小写英文字母。你需要选择 一个 下标并 删除 下标处的字符，使得 word 中剩余每个字母出现 频率 相同。
 *
 * 如果删除一个字母后，word 中剩余所有字母的出现频率都相同，那么返回 true ，否则返回 false 。
 *
 * 注意：
 *
 * 字母 x 的 频率 是这个字母在字符串中出现的次数。
 * 你 必须 恰好删除一个字母，不能一个字母都不删除。
 *
 *
 * 示例 1：
 *
 * 输入：word = "abcc"
 * 输出：true
 * 解释：选择下标 3 并删除该字母，word 变成 "abc" 且每个字母出现频率都为 1 。
 * 示例 2：
 *
 * 输入：word = "aazz"
 * 输出：false
 * 解释：我们必须删除一个字母，所以要么 "a" 的频率变为 1 且 "z" 的频率为 2 ，要么两个字母频率反过来。所以不可能让剩余所有字母出现频率相同。
 *
 *
 * 提示：
 *
 * 2 <= word.length <= 100
 * word 只包含小写英文字母。
 */
public class D230429_T2423 {
    //统计每个字母出现的频率 排序 删除频率最低的一个 或者和三处频率最高的一个

    public boolean equalFrequency(String word) {

        int[] charFrequency = new int[26];
        Arrays.fill(charFrequency, 0);

        int maxSize = 0;

        for (int i = 0; i < word.length(); i++) {
            char c = word.charAt(i);
            charFrequency[c - 'a'] += 1;
        }

        //按照顺序排序
        Arrays.sort(charFrequency);
        //将排序后数 转为list 去除所有的0
        ArrayList<Integer> list = new ArrayList<>();
        for (int i = 0; i < charFrequency.length; i++) {
            if (charFrequency[i] != 0) {
                list.add(charFrequency[i]);
            }

        }

        return getResult(list, 0) || getResult(list, list.size() - 1);

    }

    private boolean getResult(List<Integer> list, Integer index) {

        Integer num = list.get(index);

        num = num - 1;

        list.set(index, num);

        for (int i = 0; i < list.size() - 1; i++) {
            if (list.get(i) == 0) {
                continue;
            }
            if (list.get(i).intValue() != list.get(i + 1).intValue()) {
                list.set(index, num + 1);
                return false;
            }
        }

        return true;
    }

    public static void main(String[] args) {
        D230429_T2423 t = new D230429_T2423();
        boolean cccaa = t.equalFrequency("aazz");

    }
}
